/*********************************************************
 * 初学之家(http://www.g2room.com)，提供Java、Javascript（js）、Jquery、
 * 等一些工具或常用功能的实现例子代码，希望能给初学者提供学习和工作上的帮助，
 * 也希望有想提供源代码的朋友能联系我，一起努力，提供更多、更全面、更详细的
 * 一些初学代码例子及经验，帮助更多的人。
 * 
 * 我的联系方式：E-Mail：g2room@163.com
 * 网址：http://www.g2room.com
 * QQ：天涯（1173930590）
 * QQ交流群：323642758
 * 
 * 本站内容为提供各种java、javascript(JS)常用的工具源代码、实例（示例）、
 * 基本配置、教程、手册等；目前Java代码提供的工具（或转换）例子代码如下：
 * BASE64转换工具、bytes相关操作、email收发、文件操作（读写、拷贝、遍历、
 * 多线程copy等）、json格式转换、日志（Log4j）操作工具、Lucene搜索引擎的
 * 创建索引和搜索、各种不同Map的使用、定时器（Quartz）的使用例子、Socket的
 * 连接传输数据例子、WebService的例子及一些常用的工具类如String、Date及
 * JDK自带的一些工具类及函数的使用例子。
 * 
 * 说明：如需直接使用本站的例子代码，请保留此说明
 * 
 ********************************************************/
package com.g2room.io.file;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * 
 *
 * @createTime: Nov 27, 2013 10:06:23 PM
 * @author: <a href="mailto:g2room@163.com">天涯</a>
 * @version: 0.1
 * @lastVersion: 0.1
 * @updateTime: 
 * @updateAuthor: <a href="mailto:g2room@163.com">天涯</a>
 * @changesSum: 
 * 
 */
public class FileOp {
	private final static String filePath = "D:/userdata/logs/ids.txt";
	public static void main(String[] args) {
//		String text = "王问相如曰：“子好色乎？”相如曰：“臣不好色也。”王曰：“子不好色，何若孔墨乎？”相如曰：“古之避色，孔墨之徒，闻齐馈女而遐逝[5]，望朝歌而回车[6]，譬犹防火水中，避溺山隅，此乃未见其可欲，何以明不好色乎？若臣者，少长西土，鳏处独居，室宇辽廓[7]，莫与为娱。臣之东邻，有一女子，云发丰艳，蛾眉皓齿，颜盛色茂，景曜光起。恒翘翘而西顾[8]，欲留臣而共止。登垣而望臣，三年于兹矣，臣弃而不许。"
//				+ "\r\t\n"
//				+"“窃慕大王之高义，命驾东来，途出郑卫[9]，道由桑中。朝发溱洧[10]，暮宿上宫[11]。上宫闲馆，寂寞云虚[12]，门阁昼掩，暧若神居[13]。臣排其户而造其室，芳香芬烈，黼帐高张[14]。有女独处，婉然在床。奇葩逸丽，淑质艳光。睹臣迁延[15]，微笑而言曰：‘上客何国之公子！所从来无乃远乎？’遂设旨酒，进鸣琴。臣遂抚琴，为幽兰白雪之曲。女乃歌曰：‘独处室兮廓无依[16]，思佳人兮情伤悲！有美人兮来何迟，日既暮兮华色衰，敢托身兮长自思。’玉钗挂臣冠，罗袖拂臣衣。时日西夕，玄阴晦冥[17]，流风惨冽，素雪飘零，闲房寂谧[18]，不闻人声。于是寝具既陈，服玩珍奇，金鉔薰香[19]，黼帐低垂，裀褥重陈，角枕横施。女乃驰其上服，表其亵衣[20]。皓体呈露，弱骨丰肌。时来亲臣，柔滑如脂。臣乃脉定于内[21]，心正于怀，信誓旦旦，秉志不回[22]。翻然高举，与彼长辞。”";
//		write2File("尝试");
//		readFileByChar();
//		readFileByChars();
//		bufferRead();
//		bufferWrite(text);
		File f = new File("E:/var/test/logs/info/");
		delFiles(f, false);
	}
	
	public static void bufferRead() {
		BufferedReader br = null;
		try {
			// 使用缓冲区读取文件，1024为设置缓冲区大小，如果不传此参数则使用默认值8192
			br = new BufferedReader(new FileReader(filePath), 1024);
			String line;
			while((line = br.readLine()) != null) {
				System.out.println(line);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				if(null != br) br.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	public static void bufferWrite(String text) {
		BufferedWriter bw = null;
		try {
			// 使用缓冲区写入文件，1024为设置缓冲区大小，如果不传此参数则使用默认值8192
			bw = new BufferedWriter(new FileWriter(filePath), 1024);
			bw.write(text);
			bw.flush();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				if(null != bw) bw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	public static void readFileByChars() {
		FileReader fileReader = null;
		try {
			// 读取文件
			fileReader = new FileReader(filePath);
			// 一次读取1024个字节，再输出
			char[] ch = new char[1024];
			int len = 0;
			// 一次从流中读取1024个字节
			while((len=fileReader.read(ch)) != -1) {
				// 这里如果使用new String(ch)则会输出1024个字符，
				// 如果内容没长度不够，则用符号补足
				System.out.println(new String(ch, 0 ,len));
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if(null != fileReader) fileReader.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * 一个字符一个字符的读取文件，性能差
	 *
	 * @auther <a href="mailto:g2room@163.com">天涯</a>
	 * Nov 27, 2013 10:59:38 PM
	 */
	public static void readFileByChar() {
		FileReader fileReader = null;
		try {
			// 读取文件
			fileReader = new FileReader(filePath);
			int ch = 0;
			while((ch=fileReader.read()) != -1) {
				System.out.println((char) ch);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if(null != fileReader) fileReader.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	public static void write2File(String text) {
		FileWriter fileWriter = null;
		try {
		// 此构造函数如果文件不存在，则尝试创建，存在则打开，覆盖内容
		// 如要追加则使用append
		fileWriter = new FileWriter(filePath);
		// 写入字符串内容
		fileWriter.write(text);
		// 输出流中数据到文件中，即持久化
			fileWriter.flush();
		} catch (IOException e1) {
			e1.printStackTrace();
		} finally {
			try {
				if(null != fileWriter) fileWriter.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	public static void delFiles(File file, boolean deleteDir) {
		if(file.isFile()) {
			file.delete();
		} else {
			File[] files = file.listFiles();
			for(File f : files) {
				delFiles(f, deleteDir);
			}
			if(deleteDir) file.delete();
		}
	}
}
